package com.shujia.wyh.day18;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/*
        1、能否将while循环改进成for循环？能，但是不推荐，推荐使用while循环
        2、为什么java将Iterator设计成一个接口，而不是一个类呢？
            将来你需要根据不同的数据创建不同的集合进行存储，每个集合都有自身的特点，很有可能每一个集合遍历的顺序存储特点以及方式
            都不一样，所以在取值的时候，也不太一样，所以就不应该将方法实现，方法不被实现的叫做抽象方法
            为什么不是抽象类呢？因为抽象类类与类之间只能是单继承不能是多继承，所以如果是抽象类，今后一个类要想用迭代器的同时还想
            继承其他类就不行了。局限性太大，所以java就设计成了一个了接口。
            将来不同的集合根据自身存储取出元素的特点来实现对应的迭代器中的方法。


 */
public class CollectionDemo6 {
    public static void main(String[] args) {
        //创建集合对象
        Collection c1 = new ArrayList();

        //创建5个学生对象
        Student s1 = new Student("关羽", 18);
        Student s2 = new Student("张飞", 17);
        Student s3 = new Student("赵云", 16);
        Student s4 = new Student("马超", 19);
        Student s5 = new Student("黄忠", 20);

        //将学生对象添加集合中
        c1.add(s1);
        c1.add(s2);
        c1.add(s3);
        c1.add(s4);
        c1.add(s5);

        //获取s1集合的迭代器对象
        Iterator iterator = c1.iterator();

        //遍历迭代器对象获取迭代器中每个元素
        while (iterator.hasNext()) {
            Object next = iterator.next();
            //向下转型
            Student student = (Student) next;
            System.out.println("姓名：" + student.getName() + ",年龄：" + student.getAge());
        }
        System.out.println("============================================================");
//        Object next = iterator.next();
//        System.out.println(next);
//        while (iterator.hasNext()) {
//            Object next = iterator.next();
//            //向下转型
//            Student student = (Student) next;
//            System.out.println("姓名：" + student.getName() + ",年龄：" + student.getAge());
//        }
        System.out.println("============================================================");
        //要想使用迭代器遍历，遍历两次，就必须重新获取一个新的迭代器
//        Iterator iterator1 = c1.iterator();
//        while (iterator1.hasNext()) {
//            Object next = iterator1.next();
//            //向下转型
//            Student student = (Student) next;
//            System.out.println("姓名：" + student.getName() + ",年龄：" + student.getAge());
//        }
        System.out.println("============================================================");
        /*
                for(初始化语句;判断条件语句;控制条件语句){
                    循环体内容;
                }
         */

        for (Iterator iterator1 = c1.iterator(); iterator1.hasNext(); ) {
            Object next = iterator1.next();
            //向下转型
            Student student = (Student) next;
            System.out.println("姓名：" + student.getName() + ",年龄：" + student.getAge());
        }


    }
}
